fadeCallBack = null;

function opacity(id, opacStart, opacEnd, millisec, callback) {
        //speed for each frame
        var speed = Math.round(millisec / 10);
        var timer = 0;

        //determine the direction for the blending, if start and end are the same nothing happens
        if(opacStart > opacEnd) {
                for(i = opacStart; i >= opacEnd; i-=10) {
                        //alert("changeOpac(" + i + ",'" + id + "', " + opacEnd + ", " + callback + ")");
                        setTimeout("changeOpac(" + i + ",'" + id + "', " + opacEnd + ")", (timer * speed));
                        timer++;
                }
        } else if(opacStart < opacEnd) {
                for(i = opacStart; i <= opacEnd; i+=10)
                        {
                        setTimeout("changeOpac(" + i + ",'" + id + "', " + opacEnd + ")", (timer * speed));
                        timer++;
                }
        }
}

//change the opacity for different browsers
function changeOpac(opacity, id, opacEnd, callback) {
        var object = document.getElementById(id).style;
        object.opacity = (opacity / 100);
        object.MozOpacity = (opacity / 100);
        object.KhtmlOpacity = (opacity / 100);
        object.filter = "alpha(opacity=" + opacity + ")";

        if ( opacity == opacEnd && fadeCallBack != null ) {
            fadeCallBack();
        }
}

function shiftOpacity(id, millisec) {
        //if an element is invisible, make it visible, else make it ivisible
        if(document.getElementById(id).style.opacity == 0) {
                opacity(id, 0, 100, millisec);
        } else {
                opacity(id, 100, 0, millisec);
        }
}

function blendimage(divid, imageid, imagefile, millisec) {
        var speed = Math.round(millisec / 100);
        var timer = 0;
        
        //set the current image as background
        document.getElementById(divid).style.backgroundImage = "url(" + document.getElementById(imageid).src + ")";
        
        //make image transparent
        changeOpac(0, imageid);
        
        //make new image
        document.getElementById(imageid).src = imagefile;

        //fade in image
        for(i = 0; i <= 100; i++) {
                setTimeout("changeOpac(" + i + ",'" + imageid + "')",(timer * speed));
                timer++;
        }
}

function currentOpac(id, opacEnd, millisec) {
        //standard opacity is 100
        var currentOpac = 100;
        
        //if the element has an opacity set, get it
        if( document.getElementById(id).style.opacity < 100 ) {
                currentOpac = document.getElementById(id).style.opacity * 100;
        }

        //call for the function that changes the opacity
        opacity(id, currentOpac, opacEnd, millisec)
}

var slideCallBack = null;

function slideUp (element, startH, endH, millisec) {
    var speed = Math.round(millisec / 10);
    var timer = 0;

    element.style.height = startH;
    var top = element.style.top.replace("px", "");
    for( i = startH; i <= endH; i += 10 ) {
        setTimeout("document.getElementById('" + element.id + "').style.top = " + (top - i) + ";" +
                   "document.getElementById('" + element.id + "').style.height = " + i, (timer * speed));
        timer++;
    }

    //And now the callback...
    if ( slideCallBack != null ) {
        setTimeout(slideCallBack, (timer * speed));
        slideCallBack = null;
    }
}

function slideDown (element, startH, endH, millisec) {
    var speed = Math.round(millisec / 10);
    var timer = 0;

    element.style.height = startH;
    var top = Number(element.style.top.replace("px", ""));
    for( var i = startH; i >= endH; i -= 10 ) {
        var t = Number(top) + Number(startH) - Number(i);
        setTimeout("document.getElementById('" + element.id + "').style.top = " + t + ";" +
                   "document.getElementById('" + element.id + "').style.height = " + i, (timer * speed));
        timer++;
    }

    //And now the callback...
    if ( slideCallBack != null ) {
        setTimeout(slideCallBack, (timer * speed));
        slideCallBack = null;
    }
}

